//
//  OAuthViewController.swift
//  WeiBoSwift
//
//  Created by rong on 15/6/26.
//  Copyright © 2015年 rong. All rights reserved.
//
//o0黑色淘金0o  rongdongmeng@126.com
import UIKit
import SVProgressHUD
import AFNetworking

class OAuthViewController: UIViewController , UIWebViewDelegate{

    //定义常量
    private let WB_Client_ID = "3660054157"
    private let WB_Redirect_URI = "http://www.baidu.com"
    private let WB_Redirect_URIs = "https://www.baidu.com"
    private let WB_App_Secret = "c6473828a5a7f0dcfb6d4063556a5d8e"
    
    /*private let WB_Client_ID        = "113773579"
    private let WB_Redirect_URI     = "http://www.baidu.com"
    private let WB_Redirect_URIs    = "https://www.baidu.com"
    private let WB_App_Secret       = "a34f52ecaad5571bfed41e6df78299f6"*/
    
    var webview: UIWebView?
    
    override func loadView() {
        webview = UIWebView()
        
        webview?.delegate = self
        view = webview
        
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close");
    }
    
    func close()
    {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        //加载授权页面
        loadOAthuPage()
    }
    
    private func loadOAthuPage()
    {
        let urlStr = "https://api.weibo.com/oauth2/authorize?client_id=\(WB_Client_ID)&redirect_uri=\(WB_Redirect_URI)"
        
        let url = NSURL(string: urlStr)!
        
        webview?.loadRequest(NSURLRequest(URL: url))
    }
    
    //返回true表示 成功，继续加载
    // *** 授权成功 - 授权码   https://www.baidu.com/?code=25fa30f14d435bfabf5fde9d0649e7f7
    
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //获取url的完整字符串
        let urlStr = request.URL!.absoluteString;
        print(urlStr)
        
        //如果不是回调的url就继续加载
        if !urlStr.hasPrefix(WB_Redirect_URI)
        {
            return true
        }
        
        //如果是回调地址，需要根据 url中的内容， 判断是否有响应码
        // query表示“?”后面的所有的查询字符串
        let query = request.URL!.query!
        let codeStr = "code="
        //判断是否包含  code＝
        if query.hasPrefix(codeStr)
        {
            let code = query.substringFromIndex(advance(codeStr.endIndex, 0))
            
            print("获取授权码 ==> \(code)")
            
            //根据获取到的授权码 去获取 令牌token
            loadAccessToken(code)
        }
        else
        {
            print("取消授权")
            
            close()
        }
        
        return false
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.showErrorWithStatus("正在玩命加载中...")
    }
    
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    
    
    //使用授权码加载令牌 token,  用post方式
    /*
    oauth2/access_token
    OAuth2的access_token接口
    URL
    https://api.weibo.com/oauth2/access_token
    HTTP请求方式
    POST
    请求参数
    必选              类型及范围       说明
    client_id       true	string	申请应用时分配的AppKey。
    client_secret	true	string	申请应用时分配的AppSecret。
    grant_type      true	string	请求的类型，填写 authorization_code
    
    grant_type为  authorization_code 时
    必选              类型及范围       说明
    code            true	string	调用authorize获得的code值。
    redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
    
    返回数据
    {
    "access_token": "ACCESS_TOKEN",
    "expires_in": 1234,
    "remind_in":"798114",
    "uid":"12341234"
    }
    
    返回值字段	字段类型	字段说明
    access_token	string	用于调用access_token，接口获取授权后的access token。
    expires_in	string	access_token的生命周期，单位是秒数。
    remind_in	string	access_token的生命周期（该参数即将废弃，开发者请使用expires_in）。
    uid	string	当前授权用户的UID。
    */
    private func loadAccessToken(code: String)
   {
     let urlStr = "oauth2/access_token"
    
    // 请求参数
    let params = ["client_id": WB_Client_ID,
                  "client_secret": WB_App_Secret,
                  "grant_type": "authorization_code",
                  "code": code,
                  "redirect_uri": WB_Redirect_URI]
    //设置数据请求格式
    //NetworkTools.sharedNetworkTools().responseSerializer = AFHTTPResponseSerializer()
    
    NetworkTools.sharedNetworkTools().POST(urlStr, parameters: params, success: { (_, Json) -> Void in
        print("使用授权码加载令牌    成功")
        //print(Json)
        //二进制数据类型
        //let str = NSString(data: Json as! NSData, encoding: NSUTF8StringEncoding)
        
        let account = UserAccount(dict: Json as! [String : AnyObject])
        
        //加载用户信息
        account.loadUserInfo{ (account, error) -> () in
            
            if account != nil {
                print(account)
                
                //将 现加载的账户信息 传给全局的内存
                sharedUserAccount = account
                
                //发送通知
                //object = false  表示显示 WelcomeViewController
                NSNotificationCenter.defaultCenter().postNotificationName(SwitchRootVCNotication, object: false)
                
                //切换成功后，关闭当前控制器
                self.close()
                
                //设置全局的 account
                return
            }
            
            print(error)
            SVProgressHUD.showInfoWithStatus("您的网络不给力")
        }
        
        
        //获得 UserAccount对象后，归档到沙盒中
        //account.saveAccount()
        
        
        //print(account)
        
        }) { (_, error) -> Void in
            print("使用授权码加载令牌    失败")
            print(error)
            SVProgressHUD.showInfoWithStatus("您的网络不给力")
      }
    
    //加载令牌成功后，返回的数据
    /*
    
        返回数据
        
        返回值字段           字段说明
        access_token        用于调用access_token，接口获取授权后的access token
        expires_in          access_token的生命周期，单位是秒数
        remind_in           access_token的生命周期（该参数即将废弃，开发者请使用expires_in）
        uid                 当前授权用户的UID
    
        {
        "access_token" = "2.005BzhJGZRNhzDdd9d1922640zdjam";
        "expires_in" = 157679999;
        "remind_in" = 157679999;
         uid = 5640266690;
        }
    */
    
   }
    
 

}
